<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>

</body>
<script>
  const p1 = new Promise((resolve, reject) => {
    try {
      // throw new Error(`网络异常1`)
      console.log(`请求A数据`);
      setTimeout(() => {

        console.log(`请求A数成功`);
        // resolve(`ok`)
        reject(`失败1`)
      }, 2000)
    } catch (e) {
      // console.log(e);
      // console.log(e.message);
      reject(e.message)
    }
  })

  
  // p1.then(()=>{},()=>{})
  const p2 =p1.then(() => {
    console.log(1);
  })
  console.log(p1);
  console.log(p2);

  //当调用catch方法的promise实列的状态变为失败时就执行catch里面的回调函数（就是then的第二个参数）
  // 因为它是then的第二给参数 所以它的返回也会第二个一样 因为第二个也和第一个一样 所以都一样
  // catch返回值
  //  1 返回默认返回 fullfiled undefined 值为retuen 的值
  // 2如果返回的是一个promsie实列时 catch的返回值与这个promise实列保持一致
  // 3如果catch的回调函数里面发生报错 则返回状态为rejected的promis实列 值为错误信息
  // const p3 = p1.catch(() => {
  //   console.log(2);
  //   // return 1
  // //   return new Promise((resolve,reject)=>{
  // //     console.log(`请求B数据`);
  // //     // console.aa();
  // //     // throw new Error(`cc`)
  // //   setTimeout(()=>{
  // //     // console.log(`请求B数据成功`,value);
  // //     // resolve(`b数据`)
  // //     // reject(`b数据错误`)
  // //   },2000)
  // // })
  // })

  // console.log(`p1`, p1);
  // // console.log(`p2`,p2);
  // console.log(`p3`, p3);
</script>

</html>

<!-- 
      return new Promise((resolve,reject)=>{
      console.log(`请求B数据`);
      // console.aa();
      // throw new Error()
    setTimeout(()=>{
      console.log(`请求B数据成功`,value);
      // resolve(`b数据`)
      // reject(`b数据错误`)
    },2000)
  })
 -->


<!-- 
      return new Promise((resolve,reject)=>{
      console.log(`请求B数据`);
      // console.aa();
      // throw new Error()
    setTimeout(()=>{
      console.log(`请求B数据成功`,value);
      // resolve(`b数据`)
      // reject(`b数据错误`)
    },2000)
  })
  -->